# pragma once

# include "cpp_tools_Headers.h"

namespace cpp_tools
{
    /// @brief 检查路径是否存在，并决定是否创建路径
    /// @param fileName 路径，请勿包含文件名
    /// @param genPath 是否创建（如果不存在该路径）
    /// @return 0：不存在该路径（且不创建）；1：存在该路径（或已成功创建该路径）
    int checkPath(const std::string& dir_path, bool genPath = 1) 
    {
        // 检查路径是否存在
        if (std::filesystem::exists(dir_path)) {
            // std::cout << "路径存在: " << dir_path << std::endl;

            return 1; // 路径存在
        } else {
            // std::cout << "路径不存在: " << dir_path << std::endl;

            if (genPath == 1) {
                // 尝试创建路径
                if (std::filesystem::create_directories(dir_path)) {
                    // std::cout << "路径已创建: " << dir_path << std::endl;

                    return 1; // 路径已创建
                } else {
                    // std::cerr << "创建路径失败: " << dir_path << std::endl;

                    return 0; // 创建失败
                }
            } else {
                return 0; // 路径不存在且未尝试创建
            }
        }
    }

    /// @brief 检查文件是否存在
    /// @param fileName 文件名
    /// @param genPath 是否创建对应路径
    /// @return 
    /// True if no error flags are set. 
    bool checkFile(const std::string& fileName, bool genPath = 0)
    {
        std::filesystem::path dirPath = std::filesystem::path(fileName).parent_path();

        bool flag = checkPath(dirPath, genPath);
        if (!flag)
        {
            return flag;
        }

        std::ifstream file(fileName);
        return file.good();
    }
} // namespace cpp_tools
